package day19;

/**
 * @author aiPlusPlus
 * @version 1.0
 * @date 2023/1/19 14:17
 */

import java.util.HashSet;
import java.util.Set;

/**
 * 如果一个密码满足以下所有条件，我们称它是一个 强 密码：
 * <p>
 * 它有至少 8 个字符。
 * 至少包含 一个小写英文 字母。
 * 至少包含 一个大写英文 字母。
 * 至少包含 一个数字 。
 * 至少包含 一个特殊字符 。特殊字符为："!@#$%^&*()-+" 中的一个。
 * 它 不 包含 2 个连续相同的字符（比方说 "aab" 不符合该条件，但是 "aba" 符合该条件）。
 * 给你一个字符串 password ，如果它是一个 强 密码，返回 true，否则返回 false 。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：password = "IloveLe3tcode!"
 * 输出：true
 * 解释：密码满足所有的要求，所以我们返回 true 。
 * 示例 2：
 * <p>
 * 输入：password = "Me+You--IsMyDream"
 * 输出：false
 * 解释：密码不包含数字，且包含 2 个连续相同的字符。所以我们返回 false 。
 * 示例 3：
 * <p>
 * 输入：password = "1aB!"
 * 输出：false
 * 解释：密码不符合长度要求。所以我们返回 false 。
 */
public class Solution1 {
    public boolean strongPasswordCheckerII(String password) {
        if (password.length() < 8) {
            return false;
        }
        Set<Character> hs1 = new HashSet<>();
        Set<Character> hs2 = new HashSet<>();
        Set<Character> hs3 = new HashSet<>();
        String s = "!@#$%^&*()-+";
        for (int i = 0; i < s.length(); i++) {
            hs3.add(s.charAt(i));
        }
        for (int i = 0; i < 26; i++) {
            hs1.add((char) ('a' + i));
            hs2.add((char) ('A' + i));
        }
        boolean f1 = false,f2 = false,f3 = false,f4 = false;
        for (int i = 0; i < password.length(); i++) {
            char c = password.charAt(i);
            if(i!=0&&c == password.charAt(i-1)){
                return false;
            }else {
                if(Character.isDigit(c)){
                    f4 = true;
                }else if(hs1.contains(c)){
                    f1 = true;
                }else if(hs2.contains(c)){
                    f2 = true;
                }else if(hs3.contains(c)){
                    f3 = true;
                }
            }
        }
        return f1&&f2&&f3&&f4;
    }
}
